<h1>ES静态属性/方法，public属性/方法</h1>


实例属性：
- 两种定义方式： 1.直接写在class中 2在 constructor()中绑定在this上
- 实例属性读写方式： 1.通过get/set 2.通过创建实例，调用实例对象上属性
实例方法：
- 通过实例对象访问

<br />---
静态属性:
- 定义方式： 在类中通过关键字定义
- 调用方式：直接通过类访问.

<br />---
静态方法:
- 定义方式： static关键字
- 调用方式： 直接通过类访问。在静态方法内部，可以访问静态属性/实例属性。

<br />---
类属性/方法（ ------等同于静态属性/方法------）
- 定义方式：直接在类方法体外，定义类属性与方法。注意 定义方法时使用 function 关键字，不要使用箭头函数！！
- 调用方式：直接通过类访问.类方法中this指向windos，因此无法访问实例属性


<script>

  class Person {
    age = "jack"
    sex = 1;
    static school = "first school";
    constructor(sex_) {
      this.sex = sex_ || this.sex
    }
    get age() {
      return this.age;
    }
    set age(age_) {
      this.age = age_
    }

    say(message) {
      console.log("hello :", message);
    }

    static goSchool() {
      this.school = "second middle school";
      this.father = "old father";
      this.age = 99;
      console.log(" i'm going to school");
    }

    static createCompany() {
      console.log("rewrite createCompany function");
    }
  }

  Person.father = "alibaba";
  Person.createCompany = function(param){
    this.father = "American";
    console.log(this.age);
    console.log(`make money for self ! ${param}`);
  };



  var me = new Person("man");

  console.log(me.age);
  console.log(me);
  console.log(me.sex);
  me.sex = " beautiful girl"
  me.wealth = '10000000000000'
  me.say(me.sex);
  console.log(Person);
  console.log(Person.age);
  console.log(Person.sex);
  console.log(Person.father);
  Person.createCompany('not for perple');
  console.log(Person.father);
  console.log(window.father);

  Person.goSchool();
  console.log(Person.school);
  console.log(Person.father);
  console.log(Person.age);
  Person.createCompany();


</script>
